package com.pactera.asmp.server.dao;

import com.pactera.asmp.server.entity.DeviceDbcVo;
import com.pactera.asmp.server.entity.DeviceInfoSearchDTO;
import com.pactera.asmp.server.entity.ProjectMasterDeviceVo;
import com.pactera.asmp.server.pojo.DeviceInfo;
import com.pactera.asmp.server.pojo.MasterProjectDevicePO;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;

/**
 * @ProjectName: asmpserver
 * @Package: com.pactera.asmp.server.dao
 * @ClassName: DeviceInfoMapper
 * @Author: lvzhiqiang
 * @Description: DeviceInfoMapper
 * @Date: 2020/06/24 11:24
 * @Version: 1.0
 */
@Mapper
public interface DeviceInfoMapper {

    int insert(DeviceInfo deviceInfo);

    int deleteByPrimaryKey(Integer id);

    int deleteByPrimaryKeys(List<Integer> datas);

    int update(DeviceInfo deviceInfo);

    int updateStatusByDuid(@Param("duid") String duid, @Param("status") Integer status, @Param("disconnectTime") LocalDateTime disconnectTime);

    DeviceInfo selectByPrimaryKey(Integer id);

    List<DeviceInfo> getDevices(DeviceInfoSearchDTO deviceInfoSearchDTO);

    DeviceInfo selectByDuid(@Param("duid") String duid);

    DeviceInfo selectByDuidAndSn(@Param("duid") String duid, @Param("sn") String sn);

    int updateStatus(DeviceInfo deviceInfo);
    int updateStatusForSimulator(DeviceInfo deviceInfo);

    List<DeviceInfoSearchDTO> findDeviceBindByUserId(@Param("userId") Integer userId);


    int updateAutoTestStatus1(@Param("duid") String duid, @Param("userId") Integer userId, @Param("userName") String userName);
    int disconnectAutoTestDevice(@Param("duid") String duid);
    int deviceOffline(@Param("duid") String duid);

    int updateDeviceTask(DeviceInfo deviceInfo);

    int clearDeviceTaskInfo(@Param("duid") String duid, @Param("taskId") Integer taskId, @Param("taskUserId") Integer taskUserId);
    int clearDeviceTaskInfo2(@Param("duid") String duid, @Param("taskId") Integer taskId, @Param("taskUserId") Integer taskUserId);

    int deviceOfflineByDuids(@Param("duidIds") Set<String> duidIds);

    /**
     * 由于项目与设备关联，根据项目查询设备
     * @param projectId
     * @param masterComputerId
     * @return
     */
    List<DeviceDbcVo> findList(Integer projectId, Integer masterComputerId);

    DeviceInfoSearchDTO findDeviceBindByUserNameBySimulator(String userName);

    /**
     * 根据多个主键和状态获取设备
     * @param list
     * @param status
     * @return
     */
    List<DeviceInfo> selectByPrimaryKeys(List<Integer> list, Integer status);

    void deviceOfflineBySimulatorId(@Param("duid")String duid,@Param("simulatorId") String simulatorId,@Param("status") int status, @Param("disconnectTime") LocalDateTime disconnectTime);

    List<ProjectMasterDeviceVo> deviceBindByProjectId(@Param("projectId")Integer projectId);
    List<MasterProjectDevicePO> deviceBindByMasterId(@Param("masterId")Integer masterId);
    List<MasterProjectDevicePO> deviceUnBind();

    int updateNickName(DeviceInfo deviceInfo);

    List<DeviceDbcVo> findListByCuid(@Param("projectId") Integer projectId,@Param("cuid") String cuid);

    String getCanByCuidAndDuid(@Param("cuid") String cuid,@Param("duid") String duid);

    List<DeviceInfo> deviceUnBindByProjectId(@Param("projectId")Integer projectId);

    List<DeviceInfo> selectByDuids(List<String> list, Integer status);

    /**
     * 根据多个上位机ID和状态获取设备
     * @param list
     * @param status
     * @return
     */
    List<DeviceInfo> selectByMasterComputerIds(List<Integer> list, Integer status);

}
